import 'package:netease_cloud_music_api/netease_cloud_music_api.dart';
import 'package:netease_cloud_music_api/utils/player_request.dart';
import 'package:netease_cloud_music_api/utils/request.dart';

mixin Personalized {
  /// 私人 FM
  /// 说明 : 私人 FM( 需要登录 )
  Future<PlayerRequestResponse> personalizedFm() {
    return PlayerRequest(
      url: 'https://music.163.com/weapi/v1/radio/get',
      options:PlayerRequestOptions(
        crypto: EncryptType.weapi,
        method: PlayerRequestMethod.post
      )
    ).request();
  }

  /// 推荐电台
  /// 说明 : 调用此接口 , 可获取推荐电台
  Future<PlayerRequestResponse> personalizedDjProgram() {
    return PlayerRequest(
        url: 'https://music.163.com/weapi/personalized/djprogram',
        options:PlayerRequestOptions(
            crypto: EncryptType.weapi,
            method: PlayerRequestMethod.post
        )
    ).request();
  }

  /// 推荐 mv
  /// 说明 : 调用此接口 , 可获取推荐 mv
  Future<PlayerRequestResponse> personalizedMV() {
    return PlayerRequest(
        url: 'https://music.163.com/weapi/personalized/mv',
        options:PlayerRequestOptions(
            crypto: EncryptType.weapi,
            method: PlayerRequestMethod.post
        )
    ).request();
  }

  /// 推荐新音乐
  /// 说明 : 调用此接口 , 可获取推荐新音乐
  /// [limit] 取出数量 , 默认为 30 (不支持 offset)
  Future<PlayerRequestResponse> personalizedNewSongs({ int? limit }) {
    return PlayerRequest(
        url: 'https://music.163.com/weapi/personalized/newsong',
        data: { 'limit': limit ?? 30, 'type': 'recommend', 'areaId': 0},
        options:PlayerRequestOptions(
            crypto: EncryptType.weapi,
            method: PlayerRequestMethod.post
        )
    ).request();
  }

  /// 独家放送列表
  /// 说明 : 调用此接口 , 可获取独家放送列表
  /// [limit] 取出数量 , 默认为 30
  /// [offset] 偏移数量，用于分页 , 如 :(页数 - 1)*30, 其中 30 为 [limit] 的值 , 默认为 0
  Future<PlayerRequestResponse> personalizedPrivateContentList({ int? limit, int? offset }) {
    return PlayerRequest(
        url: 'https://music.163.com/api/v2/privatecontent/list',
        data: { 'limit': limit ?? 30, 'offset': offset ?? 0, 'total': true},
        options:PlayerRequestOptions(
            crypto: EncryptType.weapi,
            method: PlayerRequestMethod.post
        )
    ).request();
  }

  /// 独家放送(入口列表)
  /// 说明 : 调用此接口 , 可获取独家放送
  Future<PlayerRequestResponse> personalizedPrivateContent() {
    return PlayerRequest(
        url: 'https://music.163.com/weapi/personalized/privatecontent',
        options:PlayerRequestOptions(
            crypto: EncryptType.weapi,
            method: PlayerRequestMethod.post
        )
    ).request();
  }

  /// 推荐歌单
  /// 说明 : 调用此接口 , 可获取推荐歌单
  /// [limit] 取出数量 , 默认为 30(不支持 offset)
  Future<PlayerRequestResponse> personalized({ int? limit }) {
    return PlayerRequest(
        url: 'https://music.163.com/weapi/personalized/playlist',
        data: { 'limit': limit ?? 30, 'total': true, 'n': 1000 },
        options:PlayerRequestOptions(
            crypto: EncryptType.weapi,
            method: PlayerRequestMethod.post
        )
    ).request();
  }
}
